home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar 2004 April
/
Gamestar_61_2004-04_dvdb.iso
/
DVDStar
/
Editace
/
hltp.exe
/
{app}
/
Applications
/
QuArK
/
plugins
/
map2grid.py
< prev
next >
Wrap
Text File
|
2004-01-05
|
6KB
|
202 lines
""" QuArK - Quake Army Knife
A tricky "force-the-whole-map-polyhedrons-to-grid"
"""
#
# Copyright (C) 1996-99 Armin Rigo
# THIS FILE IS PROTECTED BY THE GNU GENERAL PUBLIC LICENCE
# FOUND IN FILE "COPYING.TXT"
#
#$Header: /cvsroot/quark/runtime/plugins/map2grid.py,v 1.5 2003/09/14 05:57:08 cdunde Exp $
Info = {
"plug-in": "Force All Polyhedrons to grid",
"desc": 'A tricky "force-the-whole-map-polyhedrons-to-grid".',
"date": "11 feb 99",
"author": "Armin Rigo",
"author e-mail": "arigo@planetquake.com",
"quark": "Version 5.6" }
import quarkx
from quarkpy.maputils import *
import quarkpy.qmenu
import quarkpy.mapcommands
import quarkpy.qmacro
class TFTGDlg (quarkpy.qmacro.dialogbox):
#
# dialog layout
#
size = (350, 260)
dfsep = 0.4 # separation at 40% between labels and edit boxes
dlgflags = FWF_KEEPFOCUS
dlgdef = """
{
Style = "15"
Caption = "Tricky Force to Grid"
sep: = {Typ="S" Txt=" "}
info: = {Typ="S" Bold="0" Txt="Use this to detect and repair slightly off-the-grid polyhedrons."}
info: = {Typ="S" Bold="0" Txt="Warning ! This is a bad trick and should only be used to repair"}
info: = {Typ="S" Bold="0" Txt="maps that are really messed up ! You should make a backup copy"}
info: = {Typ="S" Bold="0" Txt="of your map before proceeding..."}
sep: = {Typ="S" Txt=" "}
epsilon: =
{
Txt = "Move not more than"
Typ = "EF1"
SelectMe = "1"
}
nepsilon: =
{
Txt = "Normal at least"
Typ = "EF1"
}
sep: = { Typ = "S" Txt=""}
ok1:py = {Txt="" }
//ok2:py = {Txt="" }
cancel:py = {Txt="" }
}
"""
def __init__(self, form, editor):
self.editor = editor
src=quarkx.newobj(":")
src["epsilon"] = 0.01,
src["nepsilon"] = 0.99,
quarkpy.qmacro.dialogbox.__init__(self, form, src,
ok1 = quarkpy.qtoolbar.button(
self.TFTG,
"force all faces to match the grid",
ico_editor, 2,
"Force Faces"),
#ok2 = quarkpy.qtoolbar.button(
# self.TFTG,
# "do it",
# ico_editor, 2,
# "Force Faces"),
cancel = quarkpy.qtoolbar.button(
self.close,
"close this box",
ico_editor, 0,
"Cancel"))
def TFTG(self, btn):
editor = self.editor
flist = editor.Root.findallsubitems("", ':f') # all faces
grid = editor.gridstep
if not grid:
grid = 1.0
quarkx.globalaccept()
epsilon, = self.src["epsilon"]
nepsilon, = self.src["nepsilon"]
def fix(f):
if f>0:
return 1
else:
return -1
undo = quarkx.action()
for f in flist:
if f.broken: continue
# tp = list(f.threepoints(0))
# change = 0
# for i in range(3):
# v = list(tp[i].tuple)
# for j in range(3):
# test = v[j]/grid
# if test != int(test):
# delta = test-int(test)
# if delta>0.5: delta = delta-1
# if abs(delta)<epsilon:
# v[j] = int(test+0.5)*grid
# change = 1
# tp[i] = quarkx.vect(v[0], v[1], v[2])
# if change:
# new = f.copy()
# new.setthreepoints((tp[0], tp[1], tp[2]), 0)
# undo.exchange(f, new)
new = None
n = f.normal
if not n: continue
n = n.normalized
if abs(n.x)==1:
dir = 0
elif abs(n.y)==1:
dir = 1
elif abs(n.z)==1:
dir = 2
elif abs(n.x)>nepsilon:
new = f.copy()
new.distortion(quarkx.vect(fix(n.x), 0, 0), f.origin)
dir = 0
elif abs(n.y)>nepsilon:
new = f.copy()
new.distortion(quarkx.vect(0, fix(n.y), 0), f.origin)
dir = 1
elif abs(n.z)>nepsilon:
new = f.copy()
new.distortion(quarkx.vect(0, 0, fix(n.z)), f.origin)
dir = 2
else:
continue
if new is None:
k = f
else:
k = new
p1, p2, p3 = k.threepoints(0)
v = p1.tuple
test = v[dir]/grid
if test != int(test):
delta = test-int(test)
if delta>0.5: delta = delta-1
if abs(delta)<epsilon:
v = [0,0,0]
v[dir] = -grid*delta
if new is None: new = f.copy()
new.translate(quarkx.vect(tuple(v)))
if new is not None:
undo.exchange(f, new)
editor.ok(undo, "Faces To Grid")
self.close()
def TFTGclick (m):
editor = mapeditor ()
if editor is None: return
TFTGDlg(quarkx.clickform, editor)
#--- add the new menu item into the "Commands" menu ---
quarkpy.mapcommands.items.append(quarkpy.qmenu.sep) # separator
quarkpy.mapcommands.items.append(
quarkpy.qmenu.item("Tricky force to grid...", TFTGclick, "|Tricky force to grid:\n\nRepairs maps that are off-the-grid.|intro.mapeditor.menu.html#commandsmenu"))
# ----------- REVISION HISTORY ------------
#
#
# $Log: map2grid.py,v $
# Revision 1.5 2003/09/14 05:57:08 cdunde
# Typ separator correction
#
# Revision 1.4 2003/03/24 08:57:15 cdunde
# To update info and link to infobase
#
# Revision 1.3 2001/06/17 21:10:57 tiglari
# fix button captions
#
# Revision 1.2 2000/06/03 10:25:30 alexander
# added cvs headers
#
#
#
#